package com.principles.behavior.strategy;

/**
 * @Description 策略模式————定义一组算法，将每个算法都封装起来，并且使他们之间可以互换。策略模式让算法独立于使用他的客户而变化，也称为政策模式（policy）
 *
 * 策略模式适用于算法的动态替换，强调的是行为的灵活选择。
 * @Date 2025/1/27 22:13
 **/
// 测试代码
public class StrategyPattern {
    public static void main(String[] args) {
        PaymentContext context = new PaymentContext();

        // 使用支付宝支付
        context.setPaymentStrategy(new AlipayStrategy());
        context.pay(100);

        // 使用微信支付
        context.setPaymentStrategy(new WeChatPayStrategy());
        context.pay(200);
    }
}
// 定义支付策略接口
interface PaymentStrategy {
    void pay(int amount);
}

// 实现支付宝支付策略
class AlipayStrategy implements PaymentStrategy {
    @Override
    public void pay(int amount) {
        System.out.println("使用支付宝支付了 " + amount + " 元");
    }
}

// 实现微信支付策略
class WeChatPayStrategy implements PaymentStrategy {
    @Override
    public void pay(int amount) {
        System.out.println("使用微信支付了 " + amount + " 元");
    }
}

// 上下文类，用于动态选择支付策略
class PaymentContext {
    private PaymentStrategy strategy;

    // 设置支付策略
    public void setPaymentStrategy(PaymentStrategy strategy) {
        this.strategy = strategy;
    }

    // 执行支付
    public void pay(int amount) {
        if (strategy == null) {
            throw new IllegalStateException("未设置支付策略！");
        }
        strategy.pay(amount);
    }
}


